package reference;

import java.lang.ref.SoftReference;

/**
 * @author: 李德才
 * @description:
 * @create: 2020-12-13 16:13
 **/
public class Test_SoftReference {

    /**
     * 只有系统内存不够用的时候才会回收，主要用于缓存
     */
    public static void main(String[] args) {
//        将JVM内存设置为20M
        SoftReference<byte[]> m = new SoftReference<>(new byte[1024 * 1024 * 10]);
        //m = null;
        System.out.println(m.get());
        System.gc();
        try {
            Thread.sleep(500);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(m.get());

        //再分配一个数组，heap将装不下，这时候系统会垃圾回收，先回收一次，如果不够，会把软引用干掉
        byte[] b = new byte[1024 * 1024 * 15];
        System.out.println(m.get());
    }

}
